#ifndef UDSCLIENT_H
#define UDSCLIENT_H

#include "qjsonarray.h"
#include <cstdint>

#define UDS_DATA_BUF_LENS 1030u

typedef struct
{
    uint32_t xUdsId;
    uint16_t xDataLen;
    uint16_t exDataLen;
    uint8_t aDataBuf[UDS_DATA_BUF_LENS];
    uint8_t exDataBuf[UDS_DATA_BUF_LENS];
    /*tx message call back*/
    void (*pfUDSTxMsgServiceCallBack)(uint8_t);
} tUdsAppMsgInfo;

typedef struct UDSServiceInfo
{
    uint8_t serNum;      /*service num. eg 0x3e/0x87...*/
    // uint8_t sessionMode; /*default session / program session / extend session*/
    // uint8_t supReqMode;  /*support physical / function addr*/
    // uint8_t reqLevel;    /*request level.Lock/unlock*/
    // void (*pfSerNameFun)(struct UDSServiceInfo *, tUdsAppMsgInfo *);
    void (*pfSerNameFun)(uint8_t CurrStep, QJsonArray udsTxInfor, tUdsAppMsgInfo *m_pstPDUMsg);
} tUDSService;

class UdsClient
{
public:
    UdsClient();
    void UdsServiceHandle();
    /* Get UDS config Service information */

private:
    tUDSService* UDS_GetUDSServiceInfo(uint8_t *m_pSupServItem);

public:
    uint8_t UDSSerNum;
    uint8_t SupSerItem;
    tUDSService *pstUDSService;
    tUdsAppMsgInfo m_pstPDUMsg;
    /*dig session*/
    // static void UDS_DigSession(uint8_t CurrStep, QJsonArray udsTxInfor, tUdsAppMsgInfo *m_pstPDUMsg);

private:

};

#endif // UDSCLIENT_H
